from estadoFase import EstadoFase, db_session
from sqlalchemy import exc
from flask import flash
from tipoCampo import TipoCampo, tipocampo
session = db_session()

class TipoCampoManager(object):
    """Clase encargada del manejo de tipos de campo de los atributos de item"""
    def __init__(self):
        pass
    def __repr__(self):
        return '<TipoCampo Manager>'
    
    def guardarTipoCampo(self, tipoCampo):
        """
        Metodo encargado de almacenar un tipo de campo en la base de datos
        @param tipoCampo: Objeto tipo campo que se desea guardar.
        """
        session.add(tipoCampo)
        try:
            session.commit()
        except exc.IntegrityError as ex:
            session.rollback()
            return flash("El tipo de campo ya existe", "error")
        else:
            return flash("Tipo de campo registrado exitosamente")
#        session.close()
        
    def eliminarTipoCampo(self, idtipocampo):
        """
        Metodo encargado de eliminar un tipo de campo de la base de datos
        @param idtipocampo: id del tipo campo que se desea eliminar.
        """
        tipoCampo = session.query(TipoCampo).filter(TipoCampo.idtipocampo == idtipocampo).first()
        session.delete(tipoCampo)
        session.commit()
        
    def getTipoCampo(self, idtipocampo):
        """
        Metodo encargado de retornar tipo de campo dado su idtipo
        @param idtipocampo: id del tipo de campo que se desea obtener.
        """
        tipoCampo = session.query(TipoCampo).filter(TipoCampo.idtipocampo == idtipocampo).first()
        return tipoCampo
    
    def getTipoCampos(self):
        """Metodo encargado de retornar todos los tipos de campo"""
        tipoCampos = session.query(TipoCampo)
        return tipoCampos
    
    def getTipoCampoFiltradoPorNombre(self, nombre):
        """
        Metodo encargado de retornar un tipo de campo dado su nombre
        @param nombre: nombre del tipo de campo que se desea obtener.
        """
        if nombre == "":
            nombre = "%"
        else:
            nombre = "%" + nombre + "%"
        tipoCampo = session.query(TipoCampo).filter(TipoCampo.nombre.like(nombre))
        return tipoCampo
    
    def getTipoCampoPorNombre(self, nombre):
        """
        Metodo encargado de retornar un tipo de campo dado su nombre
        @param nombre: nombre del tipo de campo que se desea obtener.
        """
        tipoCampo = session.query(TipoCampo).filter(TipoCampo.nombre == nombre).first()
        return tipoCampo
    